﻿using System;
using System.Collections.Generic;
using System.Web.UI.WebControls;
using UD.GRAL.Entity;
using UD.SYSEXTUD.MASTER;
using UD.EXTUD.Service;
using Icbf.EXTUD.Entity;
using UD.Utilities.Exceptions;

namespace UD.SYSEXTUD.CURSOS
{
    public partial class Add : System.Web.UI.Page
    {
        EXTUDService oEXTUDService = new EXTUDService();

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                CargarDatosIniciales();
            }
        }

        protected void Page_PreInit(object sender, EventArgs e)
        {
            UtilesHelper.SetTituloPagina(this.Master, Request.QueryString[UtilesHelper.queryStringTituloPagina]);
            SYSEXTUDMasterPage masterPage = (SYSEXTUDMasterPage)this.Master;
            masterPage.eventoNuevo += new MasterPageDelegate(masterPage_eventoNuevo);
            masterPage.eventoBuscar += new MasterPageDelegate(masterPage_eventoBuscar);
            masterPage.eventoGuardar += new MasterPageDelegate(masterPage_eventoGuardar);
        }

        void masterPage_eventoGuardar(object sender, EventArgs e)
        {
            Guardar();
        }

        void masterPage_eventoBuscar(object sender, EventArgs e)
        {
            Response.Redirect("List.aspx?titulo=CURSOS");
        }

        void masterPage_eventoNuevo(object sender, EventArgs e)
        {
            Response.Redirect("Add.aspx?titulo=CURSOS");
        }

        private void ValidarGuardar()
        {
            UtilesHelper.ValidarSeleccionDropDownList(ddlTipoCurso, "No ha seleccionado un tipo de curso válido");
            UtilesHelper.ValidarConversionTipoDato<Int32>(ddlTipoCurso.SelectedValue, "No ha seleccionado un tipo de curso válido");

            if (!string.IsNullOrEmpty(txtDuracionCurso.Text))
            {
                UtilesHelper.ValidarConversionTipoDato<Int32>(txtDuracionCurso.Text, "La duración del curso no es válida");
            }

            UtilesHelper.ValidarConversionTipoDato<DateTime>(txtFechaInicioCurso.Text, "La fecha de inicio del curso no es válida");
            UtilesHelper.ValidarConversionTipoDato<DateTime>(txtFechaFinalizacionCurso.Text, "La fecha de finalización del curso no es válida");

            if (!string.IsNullOrEmpty(txtVersionCurso.Text))
            {
                UtilesHelper.ValidarConversionTipoDato<Int32>(txtVersionCurso.Text, "La versión del curso no es válida");
            }

            if (!string.IsNullOrEmpty(txtCapacidadCurso.Text))
            {
                UtilesHelper.ValidarConversionTipoDato<Int32>(txtCapacidadCurso.Text, "La capacidad del curso no es válida");
            }

            UtilesHelper.ValidarConversionTipoDato<Decimal>(txtValorCurso.Text, "El valor del curso no es válido");

            UtilesHelper.ValidarSeleccionDropDownList(ddlTipoFacultad, "No ha seleccionado una facultad válida");
            UtilesHelper.ValidarConversionTipoDato<Int32>(ddlTipoFacultad.SelectedValue, "No ha seleccionado una facultad válida");

            UtilesHelper.ValidarSeleccionDropDownList(ddlProyectoCurricular, "No ha seleccionado un proyecto curricular válido");
            UtilesHelper.ValidarConversionTipoDato<Int32>(ddlProyectoCurricular.SelectedValue, "No ha seleccionado un proyecto curricular válido");
        }

        private void Guardar()
        {
            try
            {
                if (Page.IsValid)
                {
                    ValidarGuardar();

                    int idTipoCurso = -1;
                    string nombreCurso = null;
                    int? duracionCurso = null;
                    DateTime? fechaInicioCurso = null;
                    DateTime? fechaFinalizacionCurso = null;
                    int? versionCurso = null;
                    int? capacidadCurso = null;
                    decimal valorCurso = -1;
                    int idTipoProyectoCurricularCurso = -1;

                    idTipoCurso = Convert.ToInt32(ddlTipoCurso.SelectedValue);
                    nombreCurso = txtNombreCurso.Text;
                    if (!string.IsNullOrEmpty(txtDuracionCurso.Text))
                    {
                        duracionCurso = Convert.ToInt32(txtDuracionCurso.Text);
                    }
                    fechaInicioCurso = Convert.ToDateTime(txtFechaInicioCurso.Text);
                    fechaFinalizacionCurso = Convert.ToDateTime(txtFechaFinalizacionCurso.Text);
                    if (!string.IsNullOrEmpty(txtVersionCurso.Text))
                    {
                        versionCurso = Convert.ToInt32(txtVersionCurso.Text);
                    }
                    if (!string.IsNullOrEmpty(txtCapacidadCurso.Text))
                    {
                        capacidadCurso = Convert.ToInt32(txtCapacidadCurso.Text);
                    }
                    valorCurso = Convert.ToDecimal(txtValorCurso.Text);
                    idTipoProyectoCurricularCurso = Convert.ToInt32(ddlProyectoCurricular.SelectedValue);

                    Curso nuevoCurso = new Curso();
                    nuevoCurso.IdTipoCurso = idTipoCurso;
                    nuevoCurso.NombreCurso = nombreCurso;
                    nuevoCurso.DuracionCurso = duracionCurso;
                    nuevoCurso.FechaInicioCurso = (DateTime)fechaInicioCurso;
                    nuevoCurso.FechaFinalizacionCurso = (DateTime)fechaFinalizacionCurso;
                    nuevoCurso.VersionCurso = versionCurso;
                    nuevoCurso.CapacidadCurso = capacidadCurso;
                    nuevoCurso.ValorCurso = valorCurso;
                    nuevoCurso.IdProyectoCurricular = idTipoProyectoCurricularCurso;
                    nuevoCurso.FechaCrea = DateTime.Now;
                    nuevoCurso.UsuarioCrea = "Administrador";
                    oEXTUDService.InsertarCurso(nuevoCurso);
                }                
            }
            catch (UserInterfaceException exc)
            {
                string mensaje = exc.Message;
            }
        }

        private void CargarDatosIniciales()
        {
            CargarDropDownTiposCurso();
            CargarDropDownFacultad();
            CargarDropDownProyectosCurricularesFacultad();
        }

        private void CargarDropDownTiposCurso()
        {
            ddlTipoCurso.DataValueField = UtilesHelper.ddDataValueFieldTipoCurso;
            ddlTipoCurso.DataTextField = UtilesHelper.ddDataTextFieldTipoCurso;
            ddlTipoCurso.DataSource = Application[UtilesHelper.appGRALTiposCursos];
            ddlTipoCurso.DataBind();
            ddlTipoCurso.Items.Insert(0, new ListItem(Server.HtmlDecode("Seleccione el tipo de curso"), UtilesHelper.cValorInicialDropdown));
        }

        private void CargarDropDownFacultad()
        {
            ddlTipoFacultad.DataValueField = UtilesHelper.ddDataValueFieldFacultad;
            ddlTipoFacultad.DataTextField = UtilesHelper.ddDataTextFieldFacultad;
            ddlTipoFacultad.DataSource = Application[UtilesHelper.appGRALFacultadesUD];
            ddlTipoFacultad.DataBind();
            ddlTipoFacultad.Items.Insert(0, new ListItem(Server.HtmlDecode("Seleccione la facultad"), UtilesHelper.cValorInicialDropdown));
        }

        private void CargarDropDownProyectosCurricularesFacultad()
        {
            ddlProyectoCurricular.Items.Insert(0, new ListItem(Server.HtmlDecode("Seleccione el proyecto curricular"), UtilesHelper.cValorInicialDropdown));
        }

        private void CargarDropDownProyectosCurricularesFacultad(int pIdFacultad)
        {
            List<ProyectoCurricularUD> listaTotalProyectoCurriculares = (List<ProyectoCurricularUD>)Application[UtilesHelper.appGRALProyectosCurricularesUD];
            listaTotalProyectoCurriculares = listaTotalProyectoCurriculares.FindAll(proyectoCurricular => proyectoCurricular.IdFacultad.Equals(pIdFacultad));
            ddlProyectoCurricular.DataValueField = UtilesHelper.ddDataValueFieldProyectoCurricular;
            ddlProyectoCurricular.DataTextField = UtilesHelper.ddDataTextFieldProyectoCurricular;
            ddlProyectoCurricular.DataSource = listaTotalProyectoCurriculares;
            ddlProyectoCurricular.DataBind();
            ddlProyectoCurricular.Items.Insert(0, new ListItem(Server.HtmlDecode("Seleccione el proyecto curricular"), "-1"));
        }

        protected void ddlTipoFacultad_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (ddlTipoFacultad.SelectedValue != "-1")
            {
                CargarDropDownProyectosCurricularesFacultad(Convert.ToInt32(ddlTipoFacultad.SelectedValue));
            }
        }

    }
}